package exam.huawei.string;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 报文
 * 题目描述
 * 对报文进行重传和重排序Q是常用的可靠性机制，重传缓中区内有一定数量的子报文，每个子报文在原始报文中的顺序已知，现在需要恢复出原始报文
 * <p>
 * 输入描述
 * 输入第一行为N，表示子报文的个数，0 <N s 1000。
 * 输入第二行为N个子报文，以空格分开，子报文格式为:字符审报文内容+后缀顺序索引
 * 字符串报文内容由[a-z,A-乙]组成，后缀为整型值，表示顺序。顺序值唯一，不重复。
 * <p>
 * 用例：rolling3 stone4 like1 a2
 */
public class Example01_2 {
    static class Word {
        int id;
        String content;

        public Word(int id, String content) {
            this.id = id;
            this.content = content;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = Integer.parseInt(sc.nextLine());
        String[] arr = sc.nextLine().split(" ");

        System.out.println(getResult(n, arr));
    }

    public static String getResult(int n, String[] arr) {
        ArrayList<Word> ans = new ArrayList<>();

        Pattern pattern = Pattern.compile("([a-zA-Z]+)(\\d+)");

        for (String s : arr) {
            Matcher matcher = pattern.matcher(s);
            if (matcher.find()) {
                String content = matcher.group(1);
                int i = Integer.parseInt(matcher.group(2)) - 1;
                ans.add(new Word(i, content));
            }
        }

        // 根据id升序排列
        ans.sort(Comparator.comparingInt(a -> a.id));

        StringJoiner sj = new StringJoiner(" ");
        for (Word an : ans) {
            sj.add(an.content);
        }
        return sj.toString();
    }
}